package jheej5024;

import java.util.Scanner;

public class J16_OOP2 {
    // 메서드 (Method)
    // 클래스의 객체가 할 수 있는 행위를 정의
    // 메서드에는 선언부와 몸체가 있음

    // 접근제한자 반환유형 메서드이름 (인수 목록) {
    // 메서드 몸체
    // }
    // 메서드 선언부는 반환유형, 메서드이름, 인수목록임
    // 메서드 선언부를 메서드 서명이라고도 함

    // 특별한 메서드인 main은 프로그램의 진입점을 제공
    // 일반적으로 프로그램은 수많은 클래스로 구성됨
    // 그 중 주가 되는 메서드가 하나 있어야하는데 그것이 바로 main메서드임

    // 숫자 자릿수 구분 문자 _
    // 정수 리터럴이 너무 길면 가독성에 문제가 있음
    // JDK7에 새롭게 추가된 기능 중 하나는 3 자릿수마다 _를 사용할 수 있게 한것

    // 클래스에 사용되는 변수의 종류
    // 멤버(member) 변수
    //	  -> class 블록내에 선언하는 변수
    //	  -> 해당 클래스를 통해서만 사용가능한 변수
    // 인스턴스(instance/object) 변수
    // 	  -> 객체를 가리키는 변수를 의미
    //	  -> 클래스와 new 연산자를 구성된 문장을 실행했을때의 결과물

    // 생성자 (Constructor)
    // 생성자는 객체를 생성하는데 사용하는 특별한 메서드
    // 모든 클래스는 하나 이상의 생성자가 있어야함
    // 설령, 메서드를 작성하지 않았더라도 컴파일러가
    // 자동으로 만들어서 넣어줌
    // 생성자는 일반 메서드와는 달리 void 나 return을 사용하지않음
    // 생성자 이름은 클래스 이름과 동일해야함

    public static void main(String[] args) {
        Students taehee = new Students();

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.print("국어 점수를 입력하시오 : ");
            taehee.kor = sc.nextInt();
            if (taehee.kor < 0 || taehee.kor > 100) {
                System.out.println("점수를 잘못입력하셨습니다. 다시 입력하시오");
            } else { break; }
        }
        System.out.print("영어 점수를 입력하시오 : ");
        taehee.eng = sc.nextInt();
        System.out.print("수학 점수를 입력하시오 : ");
        taehee.mat = sc.nextInt();
/*		taehee.total();+
		taehee.average();
		taehee.grade();*/
        taehee.showSungJuk();

    }

}

// 학생 클래스
class Students {
    int stdno;
    int kor;
    int eng;
    int mat;

    // 총점 구하기
    // void total() {
    //	System.out.println(kor + eng + mat);
    // }
    int total(){
        return kor + eng + mat;
    }

    // 평균 구하기
    // void average() {
    //	System.out.println((float) (kor + eng + mat) / 3);
    // }
    float average(){
        return (float) this.total()/3;
    }

    // 학점 구하기
/*	void grade() {
		float tot = (float) (kor + eng + mat) /3;
		switch((int) tot / 10) {
		case 10 : case 9:
			System.out.println("수"); break;
		case 8 :
			System.out.println("우"); break;
		case 7 :
			System.out.println("미"); break;
		case 6 :
			System.out.println("양"); break;
		default :
			System.out.println("가");
		}
	}*/
    void grade() {
        switch((int) this.average() / 10) {
            case 10 : case 9:
                System.out.println("수"); break;
            case 8 :
                System.out.println("우"); break;
            case 7 :
                System.out.println("미"); break;
            case 6 :
                System.out.println("양"); break;
            default :
                System.out.println("가");
        }
    }

    // 모든 결과 출력
    void showSungJuk() {
        System.out.println(this.total());
        System.out.println(this.average());
        this.grade();


    }
}
